home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / U-Utilities / (c)u1.d64 / b-monitor.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  5KB  |  154 lines

  1. 0 PRINT"[147]    BASIC MONITOR"
  2. 1 PRINT"CODED FOR COMMODORE 64 BY"
  3. 2 PRINT"      W. MURRAY STROME"
  4. 3 PRINT "  SPACES IGNORED IN DISSASSEMBLY"
  5. 4 PRINT"  'D' FOR DISASSEMBLE    "
  6. 5 PRINT"  'A' FOR ASSEMBLE"
  7. 6 PRINT"    'Q' TO EXIT PROGRAM"
  8. 8 PRINT"     'END' STOPS ASSEMBLY"
  9. 10 PRINT"  PRESS SPACE BAR TO STOP"
  10. 11 PRINT"        DISASSEMBLY"
  11. 13 PRINT""
  12. 14 PRINT"   START OF ASSEMBLY ADDRESS"
  13. 15 PRINT"  MUST BE A FOUR DIGIT NUMBER"
  14. 16 PRINT"       IN HEXADECIMAL"
  15. 17 PRINT"  USE DEVICE #3 FOR SCREEN,"
  16. 18 PRINT"          #4 FOR PRINTER"
  17. 20 (null) TO 2000
  18. 100 L=L/4096:FOR J=1 TO 4:L%=L:PRINTCHR$(48+L%-(L%>9)*7);:L=16*(L-L%)
  19. 150 NEXT:RETURN
  20. 200 L=L/16:FOR J=1 TO 2:L%=L:PRINTCHR$(48+L%-(L%>9)*7);:L=16*(L-L%):NEXT:RETURN
  21. 300 L=0:FOR J= 1 TO 4:L%=ASC(MID$(L$,J)):L=16*L+L%-48+(L%>64)*7:NEXT:RETURN
  22. 350 L=0:FOR J=1 TO 2 :L%=ASC(MID$(L$,J)):L=16*L+L%-48+(L%>64)*7:NEXT:RETURN
  23. 400 FOR K=2 TO 1 STEP -1:L=PEEK(CA+K):GOSUB 200:NEXT:RETURN
  24. 500 L=PEEK(CA+1):GOSUB 200: RETURN
  25. 600 PRINT"(";:GOSUB 400: PRINT")";:RETURN: REM INDIRECT JUMP
  26. 610 GOSUB 500:PRINT",Y";:RETURN:REM ZERO PAGE, INDEXED BY Y REGISTER
  27. 620 PRINT"(";:GOSUB 500: PRINT",X)";:RETURN: REM INDEXED INDIRECT (ZERO PAGE,X)
  28. 630 PRINT"(";:GOSUB 500:PRINT",Y)";:RETURN: REM INDIRECT INDEXED (ZERO PAGE,Y)
  29. 640 L=PEEK(CA+1): IF L>127 THEN L=L-256
  30. 642 L=CA+2+L:GOSUB 100:PRINT;:RETURN:REM RELATIVE BRANCH
  31. 650 GOSUB 400: PRINT",Y";:RETURN:REM ABSOLUTE, INDEXED BY Y REGISTER
  32. 660 PRINT"#";: GOSUB 500:PRINT;:RETURN: REM IMMEDIATE
  33. 670 GOSUB 400: PRINT",X";:RETURN: REM ABSOLUTE, INDEXED BY X REGISTER
  34. 680 GOSUB 500: PRINT",X";:RETURN: REM ZERO PAGE, INDEXED BY X REGISTER
  35. 690 GOSUB 500: PRINT;:RETURN: REM ZERO PAGE
  36. 700 GOSUB 400: PRINT;:RETURN: REM ABSOLUTE
  37. 710 PRINT;:RETURN: REM IMPLIED AND ACCUMULATOR
  38. 800 REM ASSEMBLER ROUTINES
  39. 805 IF L=3 THEN M=11:RETURN: REM IMPLIED
  40. 810 IF L=5 THEN M= 9:RETURN: REM ZERO PAGE
  41. 815 IF L=6 THEN M= 6:RETURN: REM IMMEDIATE
  42. 820 L$=MID$(AS$,7,1)
  43. 825 IF L$="X" THEN M=8:RETURN: REM ZERO PAGE,X
  44. 830 IF L$="Y" THEN M=1:RETURN: REM ZERO PAGE,Y
  45. 835 IF L$="," THEN M=2:RETURN: REM INDIRECT,X
  46. 840 IF L$=")" THEN M=3:RETURN: REM INDIRECT,Y
  47. 845 L$=RIGHT$(AS$,1)
  48. 850 IF L$="X" AND L=10 THEN M=7: RETURN: REM ABSOLUTE,X
  49. 855 IF L$="Y" AND L=10 THEN M=5:RETURN: REM ABSOLUTE,Y
  50. 860 IF L$=")" AND L=10 THEN M=0:RETURN: REM ABSOLUTE INDIRECT
  51. 865 IF LEFT$(AS$,1)="B" AND MID$(AS$,2,1)<>"I" THEN M=4:RETURN: REM BRANCH
  52. 870 IF L=7 THEN M=10:RETURN: REM ABSOLUTE
  53. 875 PRINT"MODE ?":M=12:RETURN: REM CATCH ALL OTHER INCORRECT ENTRIES
  54. 900 P=5:L=4:GOSUB 960: RETURN
  55. 905 P=4:L=2:GOTO 960
  56. 910 P=5:L=2:GOTO 960
  57. 915 P=5:L=2:GOTO 960
  58. 920 P=4:L=4:GOSUB 960:GOSUB 300
  59. 921 L=L-CA-2: IF L>127 OR L<-128 THEN PRINT "BRANCH?":M=12:RETURN
  60. 922 IF L<0 THEN L=L+256
  61. 923 RETURN
  62. 925 P=4:L=4:GOTO 960
  63. 930 P=5:L=2:GOTO 960
  64. 935 P=4:L=4:GOTO 960
  65. 940 P=4:L=2:GOTO 960
  66. 945 P=4:L=2:GOTO 960
  67. 950 P=4:L=4:GOTO 960
  68. 960 L$=MID$(AS$,P,L): RETURN
  69. 2000 DIM OP$(255),M%(255):SP$="        "
  70. 2010 FOR J=0 TO 150: REM TOTOAL OF 151 DIFFERENT OPCODE/MODE COMBINATIONS
  71. 2020 READ OP,OP$(OP),M%(OP)
  72. 2030 NEXT J
  73. 2500 L$="":POKE198,0:INPUT "ASSEMBLE OR DISSAMBLE";L$
  74. 2510 IF L$="A" GOTO 4000
  75. 2512 IF L$="Q" THEN END: REM QUIT
  76. 2513 IFL$<>"D" THEN GOTO 2500
  77. 3000 INPUT "DISASSEMBLE FROM";L$
  78. 3005 GOSUB 300: CA=L
  79. 3006 INPUT"DISASSEMBLE TO";L$
  80. 3007 GOSUB 300:CE=L
  81. 3008 INPUT"DEVICE#";N
  82. 3009 OPEN N,N:CMD N,
  83. 3010 L=CA: PRINT L;LEFT$(SP$,7-LEN(STR$(L)));: GOSUB 100
  84. 3015 P=PEEK(CA):M=M%(P)
  85. 3020 IF OP$(P)<>"" THEN 3025
  86. 3022 L=P:PRINT"   ";:GOSUB 200: PRINT"          ???";:NB=1:GOTO3065
  87. 3025 NB=2:IF M=0 OR M=5 OR M=7 OR M=10 THEN NB=3
  88. 3030 IF M=11 THEN NB=1
  89. 3035 PRINT"   ";
  90. 3040 FOR K=0 TO NB-1
  91. 3045 L=PEEK(CA+K): GOSUB 200: PRINT" ";
  92. 3050 NEXT K
  93. 3055 FOR J=NB TO 3:PRINT"   ";:NEXT:PRINT OP$(P);" ";
  94. 3060 ON M+1 GOSUB 600,610,620,630,640,650,660,670,680,690,700,710
  95. 3065 CA=CA+NB
  96. 3066 CLOSE N
  97. 3067 IF CA>CE THEN 3075
  98. 3070 GET L$:IF L$<>" " THEN GOTO 3009
  99. 3075 OPENN,N:CMDN:PRINT#N:CLOSEN:GOTO 2500
  100. 3078 END
  101. 4000 INPUT "ASSEMBLE FROM";L$
  102. 4005 GOSUB 300: CA=L
  103. 4010 L=CA:PRINT L,TAB(7);:GOSUB 100
  104. 4015 POKE631,34:POKE198,1:INPUT" ";X$:GOSUB5500
  105. 4020 IF AS$="END" GOTO 2500
  106. 4025 CO$=LEFT$(AS$,3)
  107. 4030 GOSUB 800: IF M=12 THEN 4010
  108. 4035 J=0
  109. 4040 IF CO$=OP$(J)AND M=M%(J) THEN 4050
  110. 4042 J=J+1:IF J<256 THEN GOTO 4040
  111. 4045 PRINT"OPCODE?":GOTO 4010
  112. 4050 NB=2:IF M=0 OR M=5 OR M=7 OR M=10 THEN NB=3
  113. 4055 IF M=11 THEN NB=1
  114. 4060 POKE CA,J: REM POKE OPCODE INTO MEMORY
  115. 4065 IF NB=1 THEN GOTO 4900
  116. 4070 IF M=4 THEN GOSUB 920:IF M=12 THEN GOTO 4010
  117. 4075 IF M=4 THEN POKE CA+1,L:GOTO 4900
  118. 4080 ON M+1 GOSUB 900,905,910,915,920,925,930,935,940,945,950
  119. 4085 IF NB=2 THEN GOSUB 350:POKECA+1,L:REM ONE ADDRESS BYTE ONLY; TWO:-
  120. 4090 IF NB=3 THEN GOSUB300:POKE CA+1,L-INT(L/256)*256:POKE CA+2,L/256
  121. 4900 CA=CA+NB:GOTO4010
  122. 5000 DATA 0,BRK,11,1,ORA,2,5,ORA,9,6,ASL,9,8,PHP,11,9,ORA,6,10,ASL,11
  123. 5010 DATA 13,ORA,10,14,ASL,10,16,BPL,4,17,ORA,3,21,ORA,8,22,ASL,8,24,CLC,11
  124. 5020 DATA 25,ORA,5,29,ORA,7,30,ASL,7,32,JSR,10,33,AND,2,36,BIT,9,37,AND,9
  125. 5030 DATA 38,ROL,9,40,PLP,11,41,AND,6,42,ROL,11,44,BIT,10,45,AND,10
  126. 5040 DATA 46,ROL,10,48,BMI,4,49,AND,3,53,AND,8,54,ROL,8,56,SEC,11,57,AND,5
  127. 5050 DATA 61,AND,7,62,ROL,7,64,RTI,11,65,EOR,2,69,EOR,9,70,LSR,9,72,PHA,11
  128. 5060 DATA 73,EOR,6,74,LSR,11,76,JMP,10,77,EOR,10,78,LSR,10,80,BVC,4
  129. 5070 DATA 81,EOR,3,85,EOR,8,86,LSR,8,88,CLI,11,89,EOR,5,93,EOR,7
  130. 5080 DATA 94,LSR,7,96,RTS,11,97,ADC,2,101,ADC,9,102,ROR,9,104,PLA,11
  131. 5090 DATA 105,ADC,6,106,ROR,11,108,JMP,0,109,ADC,10,110,ROR,10
  132. 5100 DATA 112,BVS,4,113,ADC,3,117,ADC,8,118,ROR,8,120,SEI,11,121,ADC,5
  133. 5110 DATA 125,ADC,7,126,ROR,7,129,STA,2,132,STY,9,133,STA,9,134,STX,9
  134. 5120 DATA 136,DEY,11,138,TXA,11,140,STY,10,141,STA,10,142,STX,10,144,BCC,4
  135. 5130 DATA 145,STA,3,148,STY,8,149,STA,8,150,STX,1,152,TYA,11,153,STA,5
  136. 5140 DATA 154,TXS,11,157,STA,7,160,LDY,6,161,LDA,2
  137. 5150 DATA 162,LDX,6,164,LDY,9,165,LDA,9,166,LDX,9,168,TAY,11
  138. 5160 DATA 169,LDA,6,170,TAX,11,172,LDY,10,173,LDA,10,174,LDX,10
  139. 5170 DATA 176,BCS,4,177,LDA,3,180,LDY,8,181,LDA,8,182,LDX,3,184,CLV,11
  140. 5180 DATA 185,LDA,5,186,TSX,11,188,LDY,7,189,LDA,7,190,LDX,5,192,CPY,6
  141. 5190 DATA 193,CMP,2,196,CPY,9,197,CMP,9,198,DEC,9,200,INY,11,201,CMP,6
  142. 5200 DATA 202,DEX,11,204,CPY,10,205,CMP,10,206,DEC,10,208,BNE,4,209,CMP,3
  143. 5210 DATA 213,CMP,8,214,DEC,8,216,CLD,11,217,CMP,5,221,CMP,7,222,DEC,7
  144. 5220 DATA 224,CPX,6,225,SBC,2,228,CPX,9,229,SEC,9,230,INC,9,232,INX,11
  145. 5230 DATA 233,SBC,6,234,NOP,11,236,CPX,10,237,SBC,10,238,INC,10,240,BEQ,4
  146. 5240 DATA 241,SBC,3,245,SBC,8,246,INC,8,248,SED,11
  147. 5250 DATA 249,SBC,5,253,SBC,7,254,INC,7
  148. 5500 AS$=""
  149. 5510 FOR J=1 TO LEN(X$):Y$=MID$(X$,J,1)
  150. 5515 IF Y$<>"" AND Y$<>" " THEN AS$=AS$+Y$
  151. 5520 NEXT
  152. 5530 L=LEN(AS$)
  153. 5600 RETURN
  154.